глобальный массив не нужен. сохраняй группу в хэш-таблицу на хэндл героя, потом загружай ее когда надо. у каждого героя будет своя группа
вот пример, молот бурь съедает юнита а удар грома ставит всех юнитов обратно
local unit q //Юнит, который добавляется в группу
local unit w = GetTriggerUnit() //Юнит, который триггерит триггер
local group g = CreateGroup() //Группа, в которую все юниты входят
local integer j = GetHandleId(w) //Узнаём ID юнита, который триггерит триггер
set q = CreateUnit(GetOwningPlayer(w), 'h00C', GetUnitX(w), GetUnitY(w), bj_UNIT_FACING)
GroupAddUnit(g, q)
// дальше сами...
решил проблему костылём - дал возможность рабочему строить только башню - шаблонку, которая в свою очередь может улучшаться в две указанные башни. Взаимосвязь поставить только от башни - шаблонки. Лимит поставил на башню шаблонки.
Но тема не закрыта. Хотелось бы узнать можно ли решить проблему без костылей.
AgaraSatan, так и думал.
там нужно не тип "исследуемый юнит", там другая переменная "переключаемый юнит (англ. triggering unit)". Исследуемый юнит - работает при событии юнит изучает/исследует. у тебя условие просто не прокатывает. делай дебаги
Suite, вот только придётся каждый раз вручную юзать этот спелл SсRealm, ты вопрос прочти прежде чем писать всякий бред
нормальным способом момент добычи отловить нельзя
недавно кидали костыль позволяющий отловить удар по дереву но он тут не особо поможет
ибо анимации будут перебивать друг друга
в общем как и сказал Suite меняй это в самой модели
странно, но в любом случае, я снова дал не ту, эта именно обновляет скин - мороз, оживление, вот это всё пересчитывает. Вот функция смены модели:
function ChangeUnitModelTo takes unit u, string modelpath returns nothing
local integer a
local integer s
set LastConvertedHandle=ConvertHandle(u)
if LastConvertedHandle>0 then
set a=RMem(LastConvertedHandle)+0x88
if a>0 then
set a=RMem(a)
if a>0 then
set s=GetStringAddress(modelpath)
call CallThisCallWith3Args(a,LastConvertedHandle,s,1)
endif
endif
endif
endfunction
Короткий ответ, нет. Такой функции не предусмотрено.
В своих роликах я решил это так. Начинаю проигрывать анимацию по индексу на максимальной скорости. С помощью таймера через отрезок времени продолжаю проигрывать анимацию уже на нормальной скорости. Зная анимацию можно посчитать сколько времени нужно указать таймеру чтобы анимация достигла нужного места. Таким образом игроку будет казаться что анимация проигрывается с какого-то места.
Другой способ это изменить модель. Создать новую анимацию и скопировать или переиспользовать кадры.
Это твой антивирусник украл, в карантин
Но да, мне тоже кажется, что это тупо реклама своей карты
С компа ничего не может пропасть просто так. Либо антивирус удалил, либо какой-то вирус перенес её в самую задницу твоих файлов на компе. Если бы карта была удалена, то она бы оказалась в корзине, если конечно она у тебя не весит 3-4 гига, чтобы удалить безвозвратно.
А так, обычно антивирусник уносит в карантин и там их держит
Скорее всего бага в хроме... лично такой проблемы не наблюдаю. Да яндекс засылает разные запросы, для отслеживания длительности сессии. Это нам помогает для планирования нового UX. Попробуй сбросить кеш.
Adobe Audition для работы со звуком.
Cubase или FL studio для обработки тоже подойдут, там тысячи плагинов накачать можно чтобы звук обрабатывать.
Но если ты ищешь кнопку "Сделать офигенно" - то такого нет.
Ну нет. Не всегда удобно ковыряться в чужих картах. Объясню на пальцах.
Есть категория действий "Буфер игры". Вот что в ней есть:
Create game cache - создать кэш с указанным именем. Если в двух разных картах создать кэши с одними и теми же именами, то кэш будет общим - можно переносить информацию с одной карты на другую.
Save unit/integer/real/boolean/string - сохраняет переменную (если юнит, то все его параметры) в кэш.
Save cache. После записи чего-ибо в кэш его следует сохранить
Load unit - загружает юнита из кэша и создаёт его на карте.
Чтобы загрузить из кэша переменную, это следует делать при помощи функций этого типа.
>> IssueInstantTargetOrder: The only use of this function is to make units give items from their inventory to other units. The order in this case would be smart, the target widget is the item and the instant target widget is the target unit. The ordered unit will then move towards the target unit and hand the item over.
>>These natives have terribly confusing names, but I've heard that they are for manipulating items. I.e. Give this item (one widget argument) to this unit (another widget argument) or drop it at this point. I don't know which argument is the item and which is the target unit though.
гугл помог, а память подвела, покупка через Neutral* приказы делается
Что за RotD?
Как я понял, смена оружия не является способностью героя, а просто способность воина, как скрытие в тени у Тиренд. У меня пока нет времени подготовить триггер, да даже посмотреть на файл FrigatPlay времени нет, но лучше у него посмотри, как он и предложил.
Сначала, Хоффман, думал обозвать тебя лентяем, но потом не удивился, почему ты ничего не нашел !!!
Близзарди засунули ети текстуры очень глубоко:
в архиве War3x.mpq есть архивы с названиями в виде букв английского алфавита, так вот твои заветние текстуры ето Cliff0.blp и Cliff1.blp в архиве Z.mpq.
Как вариант - попытаться в одной текстуре клиффов попробовать разместить сразу два визуальных решения.
Текстуры клиффов находятся в mpq архиве по адресу ReplaceableTextures\Cliff\
Текстура клиффов
A. рандумные поверхности клиффов
B. тайлинг прямых граней, верхушка клиффа
C. тайлинг прямых граней, низ клиффа
D. угловые тайлы, выбирается 1 рандумный
E. угловые тайлы, низ клиффа
F. применяютя у мостов и подъёмников
Каждому клиффсету принадлежит два файла:
Угловатые клифы ReplaceableTextures\Cliff\Cliff0.blp
Прямые клифы ReplaceableTextures\Cliff\Cliff1.blp
Вроде всё правильно написал, если не прав поправьте.
во первых: не надо дублировать вопросы
во вторых: у меня твоя карта открывается
правда я не настолько сумасшедший чтобы юзать вин10
в третьих: размер мапы большой и может тупо не хватать памяти (особенно если юзаешь вин10)
советую попробовать переустановить jngp
если не поможет то сменить винду
JNGP снимает ограничения (например максимум декорации 20к), если обычным редактором открыть критует. В jngp есть новые гуишные функции, которых нет в обычном, стандартный редактор их не распознает. Юзайте поиск, такой вопрос уже задавали
cJass, vJass и Jass2 - разные концы одной палки. Но после освоения структур, которые есть в vJass и освоения синтаксиса cJass ты вполне сможешь быстро освоить любой язык C-семейства.
Скачиваешь этот файл: xgm.guru/files/100/179980/comments/336580/War3Patch.txt
Далее открываешь архив War3Patch.mpq в редакторе mpq (например Ladik's MPQ Editor) и используешь файл в качестве listfile.
Модель будет лежать по этому пути: Units\Creeps\HeroTinker\HeroTinker.mdx
Перед созданием юнитов записать в переменную случайное число, а после - сделать проверку через If / Then / Else. Если (переменная) = 1, то дать каждому юниту в playarena[integer B] нужный предмет.
Тестил, тестил. Думал найду ошибку. Короче не знаю в чем дело, видимо и в правду баг. Решил по-другому. Ловить поставку, и ловить продажу. То есть ловить то, что пришло, и то, что ушло.
событием - "юнит закладывает в лавку" (EVENT_PLAYER_UNIT_PAWN_ITEM) ловим продажу итемов.
GetSellingUnit() =продающий торговец (типа всякие предметы закладывает в магазин и получает деньги)
GetBuyingUnit()=GetTriggerUnit() = покупающий торговец (это обычно магазин)
событием - "юнит закладывает из лавки (продает артефакт)" (EVENT_PLAYER_UNIT_SELL_ITEM) ловим покупку итемов
GetSellingUnit()=GetTriggerUnit()=продающий торговец (обычно это магазин)
GetBuyingUnit() = покупающий торговец (наш герой получает артефакты)
Решил, я по-своему. Короче, видимо, итем в магазине исчезает при добавлении. Попробовал запоминать все добавленные итемы, и при добавлении я сначала удалю всё в магазине, а потом заново добавлю. Пришлось, еще порядок (номер слотов) запоминать, а то строятся ключи хэша на строгом порядке. Если возьму и заберу итем посередине, придется заново выстраивать порядок. Не знаю, пока тестил много времени, пока без косяков. Главное, что работает. Меня это радует. Но пока не буду спешить. Мне бы хотелось затестить норм.
Ты так описал, что я тоже запутался. Но реализовать это можно только заменой скиллов. Чтобы душа не терялась, нужно хранить её в отдельной переменной (или в Custom Value юнита, например) и в зависимости от значения переменной ставить нужную версию скилла.
Заинтересовался и решил попробовать сделать. Для скорости взял Торнадо (замедление), где поставил вместо отрицательного модификатора положительный, а для восстановления здоровья ауру фонтана жизни. Сделал три триггера для способности, плюс триггер на случайное движение войск:
Инициализации триггер при изучении способности добавляет герою ауру замедления, которая на самом деле ускоряет, просто поленился менять описание. Этот триггер надо отключить после использования, добавив действие Turn off (This trigger);
Первый триггер должен был убирать ауру замедления и давать ауру восстановления, но у меня никак не получалось указать правильное событие для способности, срабатывали одновременно и первый, и второй триггеры. Тогда я поставил в событие приказ без указания цели, указал в условии immolation, всё стало нормально функционировать;
Второй триггер наоборот убирает ауру замедления и даёт ауру восстановления при приказе unimmolation.
Кроме того, что эта способность является приказом, интересно и то, что аура восстановления не действовала, если её просто скопировать в нестандартные способности, ничего не изменив, а аура замедления не действовала, если изменить её радиус действия с 600 до 900.
P. S. Там ещё триггер надо сделать, когда у героя мана заканчивается для применения способности, так как аура восстановления не пропадает, а аура замедления не появляется.
Открываешь героя в Mdlvis, выделяешь свечение, копируешь его, затем не закрывая модель, открываешь в этом же окне модель здания, будет вопрос хотите открыть новую модель? Ответ да. В открывшейся модели выбираешь точку любой поверхности с тимколором, и нажимаешь специальная вставка, вуаля, готово.
пересоздать архив кампании\импортировать в каждую карту отдельно
Попробую, а под пересоздать что имеется ввиду?
Помогло вот что, триггерное добавление абилки "свечения"
Я ставил сначало импорт атача в каждую карту кампании, по отдельности в сражении все работало
но, при переходе по кампаниям именно эта способность "свечения "отказывалась крепиться герою, а все остальные скиллы без проблем работают
Меня это достало и я просто давал скилл при вывозе юнита с кэша в переходе между картами, и все работает, тьфу тьфу)
Вот я тоже интересовался этим, но у меня проблема наоборот в отображении нужных элементов. Когда скрываешь основной интерфейс, исчезает все! Остается лишь панель управления, если применить :
То исчезает и панель управления
После всего этого пытался отобразить кнопки Меню, Логи, Союзники и Задания по отдельности с помощью
set ppp=BlzGetOriginFrame(ORIGIN_FRAME_SYSTEM_BUTTON,0)
call BlzFrameSetVisible(ppp,true)
Но оно не отображало...затем попробовал
set ppp=BlzGetFrameByName("UpperButtonBarMenuButton",0)
call BlzFrameSetVisible(ppp,true)
И оно отобразило все четыре элемента меню, но мне это не надо...
Почему нельзя просто убрать все эти противные рамочки-картиночки и оставить/удалить/переместить все как надо, почему опять все через одно место...
Либо я дурак, либо это все кривое...Уже 2 день сижу и пытаюсь сделать одно и то же и все через одно место, то одно то другое...короче я х3
Скачай какой-нибудь нестандартный интерфейс, там указаны пути импортирования файлов. Причём указаны для замены у определённой расы - human, orc, undead, nightelf.
Если же хочешь свой создать, то с помощью соответствующих графических программ сохрани эти blp, как png, внеси изменения, потом опять сохрани в blp.
Сам задал, сам ответил.
call BlzFrameSetParent выручает ситуацию, т.е. устанавливаешь предка, который не скрыт(любой созданный через blzCreateFrame, и к нему вешаешь.
Да у тебя куча дыр, во-первых ты не запустил триггер 115 области lumber direction, и оно соответственно не реагирует на событие. Во-вторых перепроверь gold проверку условия на да или нет в той карте которую ты отправил стоит нет
А золото не движется потому что ты ожидание 0,5 сек поставил а область в милисекунде от изначальной то есть триггер не успевает запуститься
да, сейчас вообще обратил внимание что текстуры идущие в комплекте не воспринимаются почему-то, а именно "Shield.blp".
Все равно проблема не решилась, вроде бы смог заменить текстуру, которую не видел но варик не воспринимает модель.
1
Afterdeath, скрин не могу, я с мобильного сейчас. Текстом напишу, по памяти.
Действия:
Pick every unit in playable map area and do multiple actions:
If picked unit belongs to ally of (Игрок 1) = да then (это союзник игрока 1).
Hide picked unit.
Делай мвссив с индексом равным номеру игрока (чтоб не запутаться) При событии ставь условие на триггеринг игрока. Если триггенинг игрок = красный то перекидывай соотв. юнита по индексу. напр MyHero[1]. Используй if then else. Все вместится в 1 триггер с кол-вом событий равным кол-ву игроков.
8gabriel8, Ландшафт собственно не пострадал, просто размеры карт кардинально не совпадают и мне самому проще как-то не по человечески копировать ландшафт и декор, так что вот такие пироги RiderOfBalance, Ок, я нашёл открытый дрп и скопировал от туда триггеры и заменил. Та открытая дрп работает, на своём я ещё не пробовал, но надеюсь что всё будет работать. RiderOfBalance, я поставил триггеры с открытой соты, всё ещё не работает, так же я попробовал вообще удалить триггеры и так же всё ещё не работало. Следовательно, скорее всего триггеры тут не причём...
war3map.j:1: parse error
war3map.j:1: Statement outside of function
war3map.j:1: Statement outside of function
war3map.j:1: Statement outside of function
war3map.j:2: Statement outside of function
war3map.j:2: Statement outside of function
war3map.j:3: Statement outside of function
war3map.j:3: Statement outside of function
war3map.j:3: Statement outside of function
war3map.j:4: Statement outside of function
war3map.j:4: Statement outside of function
war3map.j:7: Undeclared variable cj_tmpgr_copy_nw509ert7
war3map.j:9: parse error
war3map.j:9: Statement outside of function
Ниже скриншот с начало .j кода.
Это лишь малая часть проблем, так же в коде есть переменные, чьи имена начинаются с цифр (что недопустимо во всех языках программирования, если мне не изменяет память).
Собственно потому, в .j миллиард ошибок, можешь приложить оригинал карты? Потому что версию, что ты загрузил имеет просто умертвлённый скрипт.
писать прогу которая будет перехватывать события клавиатуры и отсылать команды вар3 (проще всего события клика мышкой)
для этого тебе нужно знать какой нибудь прикладной яп
и понимать как работают процессы/устройства ввода
но подобные вопросы не относятся к мапмейкерству вар3
Поскольку его не пугает наличие большого влияния промахов на геймплей - скорее всего он делает рпг. Имхо в рпг всегда клево смотрятся тексттаги полученного урона, для создания которых необходимы триггеры на отлов получения урона. А отлавливаемый урон - можно и прохилить.
Для прохила(и вообще всех манипуляций с задержкой в 0.00 сек) лично я юзаю такие костыли:
Либа здесь только для доп табуляции. Я за чистый жасс + дефайны.
library ZeroTimeEvent
globals
constant integer ZTEArraySize = 64//Even 32 is alot, 64 is too much! Exactly what I need!
timer Zero//Used for 0. sec uses
integer ZTECurrent = 0
unit array ZTEUnits[ZTEArraySize]
integer array ZTEIntegers[ZTEArraySize]
real array ZTEReals[ZTEArraySize]
trigger array ZTETriggers[ZTEArraySize]
endglobals
function ZeroTimeEvent takes nothing returns nothing
loop
set ZTECurrent = ZTECurrent - 1
call TriggerExecute( ZTETriggers[ZTECurrent] )
exitwhen ZTECurrent < 1
endloop
endfunction
#define ZTEAddUnit(u) = {
set ZTEUnits[ZTECurrent] = u
}
#define ZTEAddInteger(i) = {
set ZTEIntegers[ZTECurrent] = i
}
#define ZTEAddReal(r) = {
set ZTEReals[ZTECurrent] = r
}
#define ConfirmZTE(trig) = {
set ZTETriggers[ZTECurrent] = trig
set ZTECurrent = ZTECurrent + 1
call TimerStart( Zero, ZeroTime, false, function ZeroTimeEvent )
}
endlibrary
Я прямо через аудасити пишу в сингл тренировке, тупо, зато совсем нетрудно.
Вот тут еще есть прямо готовые саундсеты хотса (нужна рега). wcunderground.freeforums.org/soundsets-f37.html
По сабжу с архивом помочь не могу, не разбираюсь, но мб это пригодится.
Группы юнитов + хэш или структуры. При касте спелла берешь кастера, берешь его ID, проверяешь не записана ли группа в какой-либо из ячеек. Если нет - создаешь группу и записываешь её в ячейку. При смерти юнита делаешь проверку не записана ли по его ID группа юнитов - если записана - удаляешь его и проверяешь количество юнитов в группе и если оно равно 0 - удаляешь группу. Естественно хэш тоже чистишь всюду где нужно.
Это звучит как "Сделайте мне пожалуйста систему формаций". Чтобы научить тебя как это сделать придётся потратить несколько десятков часов. И тут 2 варианта: либо ты будешь читать статьи и выучишь всё сам, либо обращайся к отдельным пользователям и проси о приватных, платных, уроках в частном порядке.
Вопрос вообще ни о чём. То, о чём ты спрашиваешь делается за 20-30 минут + несколько часов на всякие плюшки и дебаг (в худшем случае).
вариант №1 - не нулить переменные, оставляя утечки номеров хендлов. это безопасно, да, если знаешь, что делаешь.
№2 - ловить UNIT_DEATH и чистить за ним
ну это совсем. такие вопросы. вам надо изучить триггеры.
ну с другими характеристиками, вам тогда нужно пересоздать юнита.
событие - юнит умирает <=найдете
условие - твой тип (триггер юнит) равно "укажите свой" <= сравнение тип юнита type of unit
действие - создать юнита (игроку-владельцу (триггер юнит)), тип, позиция умирающего <= раздел боевая единица, самое первое действие CreateUnit
Надо, конечно, взглянуть на триггеры в карте, но при спавне удалять нужно не только точки, но и группы, так как при спавне создаются не только юниты, но и группа для них (даже из одного юнита группы). Без утечек создание юнитов выглядит так:
Если отдаёшь приказ группе юнитов отправиться в область, там тоже создаётся группа и точка, тоже нужны эти custom script. Но вообще сомнительно, что это вызывает дикие лаги через два часа. Наверное, есть какие-то события с малым периодом, что тоже плодят утечки, поэтому и надо триггеры в карте смотреть.
Без явных доказательств принадлежности этого аккаунта - никак. Есть есть, то просьба обратиться в личку или через форму обратной связи (с указание контактного почтового адреса)
Нашёл систему, где звук передаётся в таймер, который истекает через 0 секунд. В результате один и тот же звук может проигрываться несколько раз без всяких проблем. В инетике пишут мол это такой баг движка.
Есть стандартная способность "Бродячий". Она задает рандомное движение всяким птицам, жабам и прочим нейтральным зверюшкам, которых в то же время можно убить. Я бы попробовал ее использовать, но не уверен, что она не только для пассивных юнитов.
можно либо заменять юнита, либо химичить с тексттагами(то есть сделать систему имен игровых обьектов на тексттагах), ещё есть функция для смены имени игрока
код
native SetPlayerName takes player whichPlayer, string name returns nothing
предметам имена изменять нельзя
способности могут быть с таким же успехом удалены, добавлены
этим
native UnitAddAbility takes unit whichUnit, integer abilityId returns boolean
native UnitRemoveAbility takes unit whichUnit, integer abilityId returns boolean
подробнее насчет предметов, думаю можно похимичить с кастом велью, устанавливать его
native S2I takes string s returns integer
native I2S takes integer i returns string
конвертировать, потом выводить строки на экран через
это
native DisplayTextToPlayer takes player toPlayer, real x, real y, string message returns nothing
с таким же успехом можно использовать хеш-таблицы, для аттача описания к чему-либо.
Ещё есть вариант, с описанием предметов и способностей в квестах.
В общем без гемора, и написания левых систем никак)
Проблема оказалась в том, что в игре теперь вместо прежнего выбора Aneu используется способность Anei, которой нет в редакторе у меня и, наверное, у тебя.
Название и описание для неё нужно редактировать в файле Units\NeutralAbilityStrings.txt, в карте пример xgm.guru/files/100/221818/comments/412020/0.w3x, экспортируешь из неё файл, ищешь строки и редактируешь их, импортируешь себе.
Да.
Открываешь карту MPQ Editor, извлекаешь оттуда файл war3map.wts, там хранится почти весь текст карты.
Найти описание юнита можно по его имени ли равкоду через поиск текста. Подробное описание называется Ubertip, подсказка (то, что над стоимостью юнита) - Tip. Там же можно изменить горячую клавишу (Hotkey).
Редактируешь и изменённый файл импортируешь назад в карту тем же MPQ Editor, перед этим лучше сохранить старую версию war3map.wts или всей карты.
Есть альтернативный способ: в самом редакторе Файл - Экспортировать Строки. Редактируешь и изменённый файл импортируешь аналогичным способом (в редакторе): Файл - Импортировать Строки.
war3map.wts имеет определённый формат, перенос строки через CRLF и кодирование UTF-8-BOM. Если что-то из этого изменить, то файл будет нечитабельным для карты, и при следующем сохранении редактор просто его перезапишет, обнуляя все текстовые изменения.
Короче порылся в ХГМ, потыкал, все испробывал, и сам нашел ответ, вот несколько моментов для того, чтобы заработал:
Требуется установленный Warcraft 3: The Frozen Throne последней версии 1.26a. Скачайте нормальный варкрафт 3, а то попадаются урезанные или нерабочие версии. Лучше оригинальную версии приобрести, и обновить. Хотя пиратки тоже неплохи. Вот использую сборкой от R.G. Mechanics
Путь к программе НЕ ДОЛЖЕН содержать русских символов
Совершайте установку в отдельную от Warcraft 3 папку
Рекомендуется приостановить антивирусные программы до установки, потом выполнить установку, затем добавить папку c JNGP в исключения, и потом только снова включить антивирусы. Эта программа вторгается в процесс worldedit.exe, поэтому может считаться вредоносной
Не трогайте файл worldedit121.exe, он должен быть и в папке игры и в папке JNGP
Сначала "Сохранить карту", только потом "Проверка карты", а ещё иногда бывает лучше сохранять пару раз
Выше, это стандартное описание для работы. Если не сработает, пробуем вот, что:
Выставляем оптимальные настройки к JNGP, указанные на скрине (см. ссылку) xgm.guru/forum/showthread.php?t=13118 Обычно, эти настройки должны быть изначально после установки JNGP (ну мало ли пригодятся)
Теперь суть моей проблемы (не знаю, что из этих ниже пунктов сработало, но сработало):
Я установил игру и JNGP на рабочий стол. Потому что на диске С, в папках типа Program Files.(x86) и др. блокирует браундмер. Обычно требует назойливо для работы права администратора, очень раздражает. Но сомневаюсь, что заработало из-за этого. Раньше не мешало нисколько.
Запустить JNGP в режим совместимости. Заходим в свойство exe-шника. Поставил семерку.
Если UMS изначально включен, то выключить его и включить (Enable UMS). Потом перезапустить WE. Скорее всего из-за него.
Из-за UMS также бывают ошибки: могут выскачить 2-3 окна : что отсутствует TriggerClearActions и layerAll. Когда пропускаешь эти окна, просто нажав на ок, затем появляется ошибка с памятью и уже потом закрывается редактор. Происходят такие ошибки, если пытаешься открыть обычным редактором карту, отредактированную в JNGP. Такая ошибка происходит, если некорректно настроен UMS (выкл. потом вкл.). Такая ошибка происходит, если открыть обычным редактором взломанную карту, которая наверняка сделана в UMS и использует необычный jass и прочие преимущества JNGP. Ошибки с UMS могут иногда происходить, поэтому скорее всего пункт 10 поможет
Если UMS перестает работать (некорректно работает), а 10 пункт не помогает. То есть плагин UMS по каким-то причинам не запускается, а JNGP стоит галочка напротив UMS (говорит, что включен). Короче узнать, что он запущен, можно при открытий редактора вместо стандартного окна выскакивает окно UMS. Если не выскакивает, надо попробовать завести снова работать. Плагин может по каким-то причинам сломаться (один раз баловался в настройках JNGP). Пробуйте потом удалить JNGP и потом заново переустановить. Или выкл. и вкл, UMS затем выйти из jngp, удалить и заново переустановить
В случае вылета игры, следует всегда прикреплять к вопросу отчет об ошибке.
Он находится в: "%папка_с_игрой%\Errors\%дата_вылета% Crash.txt".
Вылетает при загрузке данных о предметах.
Удали все предметы и проверь, не перестанет ли вылетать.
Если перестанет, то удаляй предметы по одному, пока не найдешь виновника.
Еще не помешала бы сама карта/кампания, которую нужно было прикрепить вместе с отчетом с самого начала.
я тупо тыкаю на нем и сразу выскакивает это ошибкка, он даже не кастуется
кажется проблема в... ну я наверное понял...я сейчас не с компьютера пишу, как буду дома покажу
исправил ошибку...область воздействия не должно превышать размера карты, в этом ошибка была, спасибо
Лучше писать код на Sublime Text 3 с подсветкой xgm.guru/p/wc3/jass-syntax-sublime-textmate
А потом копировать в мапу
На 1.27b там норм проверка встроенная, и всё чётко работает
Это вообще никак не влияет. Ты ещё скажи, что set a = a + 1 не работает.
Дело может быть в том, что юнит за 10 секунд разлагается.
немного исправленный код
function Reborn takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer s = GetHandleId(t)
local unit dead = LoadUnitHandle (udg_hash, s, 6)
call FlushChildHashtable(udg_hash, s)
call CreateUnit(GetOwningPlayer(dead), GetUnitTypeId(dead), GetUnitX(dead), GetUnitY(dead), GetUnitFacing(dead))
call DestroyTimer(t)
set dead = null
set t = null
endfunction
function Trig_Kill_Unit_Actions takes nothing returns nothing
local unit dead = GetTriggerUnit() //Присваиваем убитого юнита
local timer t = CreateTimer() //Создаём таймер
local integer s = GetHandleId(t) //Узнаём его ID
call SaveUnitHandle(udg_hash, s, 6, dead) //Сохраняем юнита
call TimerStart(t, 10, false, function Reborn) //Активируем одноразовый таймер на 10 секунд
set dead = null
set t = null
endfunction
код с учётом разложения
function Reborn takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer s = GetHandleId(t)
local player p = LoadPlayerHandle(udg_hash, s, 0)
local integer id = LoadInteger(udg_hash, s, 0)
local real x = LoadReal(udg_hash, s, 0)
local real y = LoadReal(udg_hash, s, 1)
local real f = LoadReal(udg_hash, s, 2)
call CreateUnit(p, id, x, y, f)
call FlushChildHashtable(udg_hash, s)
call DestroyTimer(t)
set t = null
set p = null
endfunction
function Trig_Kill_Unit_Actions takes nothing returns nothing
local unit dead = GetTriggerUnit()
local timer t = CreateTimer()
local integer s = GetHandleId(t)
call SavePlayerHandle(udg_hash, s, 0, GetOwningPlayer(dead))
call SaveInteger(udg_hash, s, 0, GetUnitTypeId(dead))
call SaveReal(udg_hash, s, 0, GetUnitX(dead))
call SaveReal(udg_hash, s, 1, GetUnitY(dead))
call SaveReal(udg_hash, s, 2, GetUnitFacing(dead))
call TimerStart(t, 10, false, function Reborn)
set dead = null
set t = null
endfunction
Предполагаю, что делается через какой-то цикл перебором всех элементов таблицы, если элемент является функцией, то запустить.
Правильно предполагаете, но мануалы же никому неинтересны, проже же вопрос задать.
test = { }
test.a = 123
test.b = true
function test.func0()
print(0)
end
function test.func1()
print(1)
end
function test.qab()
print(2)
end
for k, v in pairs(test) do
if type(v) == 'function' then
print(k, ':')
v()
end
end
DATA = {
Heroes = {}
}
do
local PickAHero = CreateTrigger()
for i = 0, 9 do
TriggerRegisterPlayerUnitEvent(PickAHero, Player(i), EVENT_PLAYER_UNIT_SELECTED)
end
TriggerAddAction(PickAHero, function()
local hero = GetTriggerUnit()
local owner = GetTriggerPlayer()
local ownerID = GetPlayerId(owner)
if IsUnitType(hero, UNIT_TYPE_HERO) then
local x = GetPlayerTeam(owner) == 1 and -7271 or 7271
local y = GetPlayerTeam(owner) == 1 and -55 or 55
PanCameraToTimedForPlayer(owner, x, x, 0)
SetUnitX(hero, x)
SetUnitY(hero, y)
SetUnitOwner(hero, owner, true)
DATA.Heroes[ownerID] = hero
end
end)
end
» WarCraft 3 / Добавление типа юнита в юнит групп.
» WarCraft 3 / Общее здание
» WarCraft 3 / Анимация юнита
» WarCraft 3 / Карта в ворлде не открывается
» Администрация XGM / Реклама
» WarCraft 3 / Озвучка и текст
» WarCraft 3 / У меня очередной вопрос
» WarCraft 3 / Текстуры склонов
» WarCraft 3 / Не открывается карта
» WarCraft 3 / Еще кое что...
» WarCraft 3 / Мне нужна помощь с 1 скилом.
» WarCraft 3 / Свечение героя
» WarCraft 3 / Интерфейсы
» WarCraft 3 / Что не так?
» WarCraft 3 / Помощь в Депротекте карты
» WarCraft 3 / Не находится игра
» WarCraft 3 / Создание юнита после смерти
» WarCraft 3 / Проблема с ИИ
» Администрация XGM / Как удалить акк?
» WarCraft 3 / 1 таймер много юнитов!
» WarCraft 3 / Изменить описание способности
» WarCraft 3 / Импорт звуков
» WarCraft 3 / Что за ошибка?
» WarCraft 3 / CreateTimer
» WarCraft 3 / lua таблица в таблице